tinc VPNを試す
闇ネットの拠点間接続用にtincのswitchモードを試してみる switchモード = L2でつながる
つまり、IPパケットではなく、Ethernetフレームを転送するVPN
tincは、
UDPベースだからTCPベースのVPNみたいに輻輳制御が二重に走ったりしない 基本的にtincは拠点間VPNなのでサーバ/クライアントの区別がないけど、この記事中では便宜上VPNのセッションを開始する側(NATの内側にいるホスト)をクライアント、VPNのセッションを受け付ける側(NATの外側にいるホスト)をサーバと呼ぶ サーバ側
さくらVPSにUbuntu 20.04をインストールする
ホスト名を gsngw01 とする
この名前はtincのノード名としても使う
グローバル側IPアドレスは203.0.113.1/24
VPN側のIPアドレスは 10.0.0.1/8
作成するネットワーク名をgsnとする
以下のコマンドを実行して設定用ディレクトリをつくる
code:sh
sudo mkdir /etc/tinc/gsn
sudo mkdir /etc/tinc/gsn/hosts
以下のファイルを作成する
code:/etc/tinc/gsn/tinc.conf
Name = gsngw01
Mode = switch
Device = /dev/net/tun
code:/etc/tinc/gsn/tinc-up
ip link set $INTERFACE up
ip link set dev $INTERFACE master br0
ip addr add 10.0.0.1/8 dev br0
code:/etc/tinc/gsn/tinc-down
ip link set dev $INTERFACE nomaster
ip link set $INTERFACE down
以下のコマンドを実行して、鍵ペアを生成する
code:sh
sudo tincd -n gsn -K
公開鍵が /etc/tinc/gsn/hosts/gsngw01 に書き込まれる
秘密鍵が /etc/tinc/gsn/rsa_key.priv に書き込まれる
/etc/tinc が以下のような感じになってれば設定は完了
code:sh
$ tree /etc/tinc/
/etc/tinc/
├── gsn
│ ├── hosts
│ │ ├── gsngw01
│ │ └── gsngw02
│ ├── rsa_key.priv
│ ├── tinc-down
│ ├── tinc-up
│ └── tinc.conf
└── nets.boot
2 directories, 7 files
code:/etc/tinc/gsn/hosts/gsngw01
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCXXXXXXXXXXXXXXXRptqA/I6gzpvLL8DEG20pJYSMx6xcPunfazBnKb3w
ctz5xwJqTMpYzUQwTs0aIVqF/Rf3+yAIs/UPA1ToX3q3Lq588wIeIJ9R2jr9LOpU
o7dgDrE3GDdhOXXXXXXXXXXsXlYVfQ1OLQtZFkyAJU5teK++cWmqpL15liZ+JxrI
Gkh+NnUVR1DJMh1eEWg/sZMYzIFKZ71BBduhDPo1vYzL83iqwB8LoKDNehd/zzSK
mBcxFLb8Bf2ob6c13cyISeFhuWVQMvV0HLDdddHUgBZqhPj9qmUSlXXXXXXXXXXX
2DkrYX2zMIQ+FP0WCT9BdjVA/ZKnX72dtwIDAQAB
-----END RSA PUBLIC KEY-----
クライント側
RaspberryPi4にRaspberryPi OSをセットアップする
ホスト名を gsngw02 とする
この名前はtincのノード名としても使う
VPN側のIPアドレスは 10.0.0.1/8
普通のご家庭のNATの内側に設置されている
code:/etc/tinc/gsn/tinc.conf
Name = gsngw02
Mode = switch
Device = /dev/net/tun
ConnectTo = gsngw01
code:/etc/tinc/gsn/tinc-up
ip link add br0 type bridge
ip link set br0 up
ip link set $INTERFACE up
ip link set dev $INTERFACE master br0
ip addr add 10.0.0.2/8 dev br0
code:/etc/tinc/gsn/tinc-down
ip link set dev $INTERFACE nomaster
ip link set dev $INTERFACE down
ip link set dev br0 down
ip link del dev br0
code:sh
sudo systemctl enable tinc@gsn.service